package com.woan.api.util;
import java.util.ArrayList; 
import java.util.List; 
 
import javapns.devices.Device; 
import javapns.devices.implementations.basic.BasicDevice; 
import javapns.notification.AppleNotificationServerBasicImpl; 
import javapns.notification.PushNotificationManager; 
import javapns.notification.PushNotificationPayload; 
import javapns.notification.PushedNotification; 
import org.apache.log4j.Logger;


 
/**
 * TODO
 * @author cuiran
 * @version TODO
 */ 
public class IphonePush { 
    //private static Log log = LogFactory.getLog(IphonePush.class.getName()); 
    private static Logger log = Logger.getLogger(IphonePush.class); 
     /************************************************
     测试推送服务器地址：gateway.sandbox.push.apple.com /2195 
     产品推送服务器地址：gateway.push.apple.com / 2195 
 
    需要javaPNS_2.2.jar包
 
     ***************************************************/ 
    /**
 
     *这是一个比较简单的推送方法，
 
     * apple的推送方法
 
     * @param tokens   iphone手机获取的token
 
     * @param path 这里是一个.p12格式的文件路径，需要去apple官网申请一个 
 
     * @param password  p12的密码 此处注意导出的证书密码不能为空因为空密码会报错
 
     * @param message 推送消息的内容---message是一个json的字符串message="{'aps':{'alert':'test'}}";  
 
     * @param count 应用图标上小红圈上的数值，默认为1
 
     * @param sendCount 单发还是群发  ------true：单发 false：群发
     * @param toserver 发送到测试服务器还是正式服务器  ------true：表示的是产品发布推送服务 false：表示的是产品测试推送服务 
     */ 
 
    public void sendpush(List<String> tokens,String path, String password, String message,Integer count,boolean sendCount,boolean toserver) { 
 
    try { 
        //
    		System.out.println("ios push 开始"); 
            PushNotificationPayload payLoad =  PushNotificationPayload.fromJSON(message); 
             
            //payLoad.addAlert("iphone推送测试 www.baidu.com"); // 消息内容 
             
            payLoad.addBadge(count); // iphone应用图标上小红圈上的数值 
             
            payLoad.addSound("default"); // 铃音 默认 
             
 
            PushNotificationManager pushManager = new PushNotificationManager(); 
             
            //true：表示的是产品发布推送服务 false：表示的是产品测试推送服务 
            
            pushManager.initializeConnection(new AppleNotificationServerBasicImpl(path, password, toserver)); 
           
            List<PushedNotification> notifications = new ArrayList<PushedNotification>();  
             
            // 发送push消息 
            System.out.println("sendCount="+sendCount); 
            if (sendCount) { 
            	System.out.println("apple 推送 单");  
            log.info("--------------------------apple 推送 单-------"); 
            
            Device device = new BasicDevice(); 
             
            device.setToken(tokens.get(0)); 
             
            PushedNotification notification = pushManager.sendNotification(device, payLoad, true); 
             
            notifications.add(notification); 
             
            } else { 
             
            log.info("--------------------------apple 推送 群-------"); 
            System.out.println("apple 推送 群");  
            List<Device> device = new ArrayList<Device>(); 
             
            for (String token : tokens) { 
            	//System.out.println(token.length());
            	device.add(new BasicDevice(token)); 
             
            } 
             
            notifications = pushManager.sendNotifications(payLoad, device); 
             
            } 
             
            List<PushedNotification> failedNotifications = PushedNotification.findFailedNotifications(notifications); 
             
            List<PushedNotification> successfulNotifications = PushedNotification.findSuccessfulNotifications(notifications); 
             
            int failed = failedNotifications.size(); 
             
            int successful = successfulNotifications.size(); 
             
              
             
            if (successful > 0 && failed == 0) { 
             
            log.info("-----All notifications pushed 成功 (" + successfulNotifications.size() + "):"); 
            System.out.println("-----All notifications pushed 成功 (" + successfulNotifications.size() + "):");  
            } else if (successful == 0 && failed > 0) { 
             
            log.info("-----All notifications 失败 (" + failedNotifications.size() + "):"); 
            System.out.println("-----All notifications 失败 (" + failedNotifications.size() + "):"); 
             
            } else if (successful == 0 && failed == 0) { 
             
            System.out.println("No notifications could be sent, probably because of a critical error"); 
             
            } else { 
             
            log.info("------Some notifications 失败 (" + failedNotifications.size() + "):"); 
            System.out.println("-----Some notifications 失败 (" + failedNotifications.size() + "):");  
            log.info("------Others 成功 (" + successfulNotifications.size() + "):"); 
            System.out.println("-----Others 成功 (" + successfulNotifications.size() + "):");  
            } 
     
    // pushManager.stopConnection(); 
 
    } catch (Exception e) { 
     
    e.printStackTrace(); 
     
    } 
 
} 
     
    /**
     * TODO
     * @param args
     */ 
    public static void main(String[] args) { 
    	IphonePush send=new IphonePush();
    	//String str="89e616242ec6fdd4aa9a15cf3a4ba033a1a6a34f8501340d4faf2577899fdab3";
//   	str=str.replaceAll(" ", "");
    	String str1="57f72a21fb51cc09cc236d928ebf8df344d1189fa82ec5079dd68dfb4ab4bdcf";
        List<String> tokens=new ArrayList<String>(); 
        //tokens.add(str);
        tokens.add(str1);
//        tokens.add("dc2cf037bd4465c851b1d96a86b0a028307bc7e443435b6fafe93c2957bb415c"); 
        String path=System.getProperty("user.dir")+"/WebRoot/push_production-zhengshi.p12";
        String password="woan"; 
        String message="{'aps':{'alert':'test'}}"; 
        Integer count=1; 
        boolean sendCount=false; 
        send.sendpush(tokens, path, password, message, count, sendCount,true);          
    } 
 
} 
